gl renderer: bind the texture framebuffer before rendering
authorTimm Bäder <mail@baedert.org>
Wed, 24 Apr 2019 12:25:54 +0000 (14:25 +0200)
committerBenjamin Otte <otte@redhat.com>
Fri, 26 Apr 2019 16:05:32 +0000 (18:05 +0200)
When rendering to a texture, collecting the render ops might bind a
different framebuffer, so bind the one we want again before doing the
actual rendering.

gsk/gl/gskglrenderer.c

index 24b81c6d3f495a728a8ce440b872afecd450a68a..00351cdbca98af123b149ed12b84201a748a791a 100644 (file)
@@ -3012,6 +3012,10 @@ gsk_gl_renderer_do_render (GskRenderer           *renderer,
   gsk_profiler_timer_begin (profiler, self->profile_timers.cpu_time);
 #endif
 
+  /* Actually do the rendering */
+  if (fbo_id != 0)
+    glBindFramebuffer (GL_FRAMEBUFFER, fbo_id);
+
   glViewport (0, 0, ceilf (viewport->size.width), ceilf (viewport->size.height));
   gsk_gl_renderer_setup_render_mode (self);
   gsk_gl_renderer_clear (self);
@@ -3083,8 +3087,6 @@ gsk_gl_renderer_render_texture (GskRenderer           *renderer,
   glFramebufferTexture2D (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture_id, 0);
   g_assert_cmphex (glCheckFramebufferStatus (GL_FRAMEBUFFER), ==, GL_FRAMEBUFFER_COMPLETE);
 
-  gsk_gl_renderer_clear (self);
-
   /* Render the actual scene */
   gsk_gl_renderer_do_render (renderer, root, viewport, fbo_id, 1);